package com.yuanfengerp.expenseitem.service.impl;

import com.yuanfengerp.expenseitem.dao.IExpenseItemMapper;
import com.yuanfengerp.expenseitem.model.ExpenseItemInfo;
import com.yuanfengerp.expenseitem.service.IExpenseItemService;
import com.yuanfengerp.publicUtil.Result;
import com.yuanfengerp.publicUtil.SnowflakeIdWorker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
import java.util.Map;


@Service
public class IExpenseItemServiceImpl implements IExpenseItemService {
    @Autowired
    private IExpenseItemMapper ieim;
    SnowflakeIdWorker idWorker = new SnowflakeIdWorker(5);

    @Override
    public Result<String> insertExpenseItem(ExpenseItemInfo expenseItemInfo) {
        // 业务逻辑判断：检查费用项目名称是否为空，如果为空则不允许插入
        if (expenseItemInfo.getExpenses_name() == null || expenseItemInfo.getExpenses_name().isEmpty()) {
            return Result.failure(400, "费用项目名称不能为空，请填写后再尝试添加");
        }

        // 设置相关属性
        expenseItemInfo.setExpenses_ID(idWorker.nextId() + "");
        expenseItemInfo.setExpenses_operate_time(new Timestamp(System.currentTimeMillis()));
        expenseItemInfo.setExpenses_state(0);
        expenseItemInfo.setExpenses_review_time(new Timestamp(System.currentTimeMillis()));

        int i = ieim.insertExpenseItemInfo(expenseItemInfo);
        return i > 0 ? Result.success("添加成功") : Result.failure(400, "添加失败");
    }

    @Override
    public Result<String> deleteExpenseItem(String expenses_ID) {
        // 业务逻辑判断：先查询要删除的费用项目是否存在，如果不存在则直接返回删除失败的结果
        ExpenseItemInfo expenseItemInfo = ieim.selectExpenseItemInfoById(expenses_ID);
        if (expenseItemInfo == null) {
            return Result.failure(400, "要删除的费用项目不存在，请确认后再尝试删除");
        }

        int i = ieim.deleteByPrimaryKey(expenses_ID);
        return i > 0 ? Result.success("删除成功") : Result.failure(500, "删除失败");
    }

    @Override
    public Result<String> updateExpenseItem(ExpenseItemInfo expenseItemInfo) {
        // 业务逻辑判断：检查要更新的费用项目是否存在，如果不存在则不允许更新
        ExpenseItemInfo existingExpenseItemInfo = ieim.selectExpenseItemInfoById(expenseItemInfo.getExpenses_ID());
        if (existingExpenseItemInfo == null) {
            return Result.failure(400, "要更新的费用项目不存在，请确认后再尝试更新");
        }

        // 设置更新时间
        expenseItemInfo.setExpenses_review_time(new Timestamp(System.currentTimeMillis()));

        int i = ieim.updateExpenseItemInfo(expenseItemInfo);
        return i > 0 ? Result.success("修改成功") : Result.failure(500, "修改失败");
    }

    @Override
    public Result<ExpenseItemInfo> selectExpenseItemById(String expenses_ID) {
        ExpenseItemInfo expenseItemInfo = ieim.selectExpenseItemInfoById(expenses_ID);
        if (expenseItemInfo == null) {
            return Result.failure(400, "要查询的费用项目不存在");
        }
        return Result.success(expenseItemInfo);
    }




    @Override
    public Result<List<ExpenseItemInfo>> selectExpenseItem(Map<String, Object> params) {
        Logger logger = LoggerFactory.getLogger(this.getClass());
        params.put("pageNum", ((int) params.get("pageNum") - 1) * (int) params.get("pageSize"));
        System.out.println(params.toString());
        List<ExpenseItemInfo> expenseItemInfos = ieim.selectExpenseItemInfoByPageAndCondition(params);

        if (expenseItemInfos.isEmpty()) {
            logger.warn("未查询到符合条件的数据");
            return Result.failure(400, "没有数据");
        } else {
            logger.info("成功查询到 {} 条费用项目信息", expenseItemInfos.size());
            return Result.success(expenseItemInfos);
        }
    }
}
